{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# AMES_House数据集特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 167,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "import seaborn as sns\n",
    "%matplotlib inline\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 168,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>MSZoning</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>Street</th>\n",
       "      <th>Alley</th>\n",
       "      <th>LotShape</th>\n",
       "      <th>LandContour</th>\n",
       "      <th>Utilities</th>\n",
       "      <th>...</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>PoolQC</th>\n",
       "      <th>Fence</th>\n",
       "      <th>MiscFeature</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SaleType</th>\n",
       "      <th>SaleCondition</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>65.0</td>\n",
       "      <td>8450</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>208500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>20</td>\n",
       "      <td>RL</td>\n",
       "      <td>80.0</td>\n",
       "      <td>9600</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>Reg</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>2007</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>181500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>68.0</td>\n",
       "      <td>11250</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>9</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>223500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>70</td>\n",
       "      <td>RL</td>\n",
       "      <td>60.0</td>\n",
       "      <td>9550</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>2006</td>\n",
       "      <td>WD</td>\n",
       "      <td>Abnorml</td>\n",
       "      <td>140000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>60</td>\n",
       "      <td>RL</td>\n",
       "      <td>84.0</td>\n",
       "      <td>14260</td>\n",
       "      <td>Pave</td>\n",
       "      <td>NaN</td>\n",
       "      <td>IR1</td>\n",
       "      <td>Lvl</td>\n",
       "      <td>AllPub</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>0</td>\n",
       "      <td>12</td>\n",
       "      <td>2008</td>\n",
       "      <td>WD</td>\n",
       "      <td>Normal</td>\n",
       "      <td>250000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 81 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   Id  MSSubClass MSZoning  LotFrontage  LotArea Street Alley LotShape  \\\n",
       "0   1          60       RL         65.0     8450   Pave   NaN      Reg   \n",
       "1   2          20       RL         80.0     9600   Pave   NaN      Reg   \n",
       "2   3          60       RL         68.0    11250   Pave   NaN      IR1   \n",
       "3   4          70       RL         60.0     9550   Pave   NaN      IR1   \n",
       "4   5          60       RL         84.0    14260   Pave   NaN      IR1   \n",
       "\n",
       "  LandContour Utilities    ...     PoolArea PoolQC Fence MiscFeature MiscVal  \\\n",
       "0         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "1         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "2         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "3         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "4         Lvl    AllPub    ...            0    NaN   NaN         NaN       0   \n",
       "\n",
       "  MoSold YrSold  SaleType  SaleCondition  SalePrice  \n",
       "0      2   2008        WD         Normal     208500  \n",
       "1      5   2007        WD         Normal     181500  \n",
       "2      9   2008        WD         Normal     223500  \n",
       "3      2   2006        WD        Abnorml     140000  \n",
       "4     12   2008        WD         Normal     250000  \n",
       "\n",
       "[5 rows x 81 columns]"
      ]
     },
     "execution_count": 168,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train = pd.read_csv('Ames_House_train.csv')\n",
    "test = pd.read_csv('Ames_House_test.csv')\n",
    "\n",
    "train.head()\n",
    "#test.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 169,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1460 entries, 0 to 1459\n",
      "Data columns (total 81 columns):\n",
      "Id               1460 non-null int64\n",
      "MSSubClass       1460 non-null int64\n",
      "MSZoning         1460 non-null object\n",
      "LotFrontage      1201 non-null float64\n",
      "LotArea          1460 non-null int64\n",
      "Street           1460 non-null object\n",
      "Alley            91 non-null object\n",
      "LotShape         1460 non-null object\n",
      "LandContour      1460 non-null object\n",
      "Utilities        1460 non-null object\n",
      "LotConfig        1460 non-null object\n",
      "LandSlope        1460 non-null object\n",
      "Neighborhood     1460 non-null object\n",
      "Condition1       1460 non-null object\n",
      "Condition2       1460 non-null object\n",
      "BldgType         1460 non-null object\n",
      "HouseStyle       1460 non-null object\n",
      "OverallQual      1460 non-null int64\n",
      "OverallCond      1460 non-null int64\n",
      "YearBuilt        1460 non-null int64\n",
      "YearRemodAdd     1460 non-null int64\n",
      "RoofStyle        1460 non-null object\n",
      "RoofMatl         1460 non-null object\n",
      "Exterior1st      1460 non-null object\n",
      "Exterior2nd      1460 non-null object\n",
      "MasVnrType       1452 non-null object\n",
      "MasVnrArea       1452 non-null float64\n",
      "ExterQual        1460 non-null object\n",
      "ExterCond        1460 non-null object\n",
      "Foundation       1460 non-null object\n",
      "BsmtQual         1423 non-null object\n",
      "BsmtCond         1423 non-null object\n",
      "BsmtExposure     1422 non-null object\n",
      "BsmtFinType1     1423 non-null object\n",
      "BsmtFinSF1       1460 non-null int64\n",
      "BsmtFinType2     1422 non-null object\n",
      "BsmtFinSF2       1460 non-null int64\n",
      "BsmtUnfSF        1460 non-null int64\n",
      "TotalBsmtSF      1460 non-null int64\n",
      "Heating          1460 non-null object\n",
      "HeatingQC        1460 non-null object\n",
      "CentralAir       1460 non-null object\n",
      "Electrical       1459 non-null object\n",
      "1stFlrSF         1460 non-null int64\n",
      "2ndFlrSF         1460 non-null int64\n",
      "LowQualFinSF     1460 non-null int64\n",
      "GrLivArea        1460 non-null int64\n",
      "BsmtFullBath     1460 non-null int64\n",
      "BsmtHalfBath     1460 non-null int64\n",
      "FullBath         1460 non-null int64\n",
      "HalfBath         1460 non-null int64\n",
      "BedroomAbvGr     1460 non-null int64\n",
      "KitchenAbvGr     1460 non-null int64\n",
      "KitchenQual      1460 non-null object\n",
      "TotRmsAbvGrd     1460 non-null int64\n",
      "Functional       1460 non-null object\n",
      "Fireplaces       1460 non-null int64\n",
      "FireplaceQu      770 non-null object\n",
      "GarageType       1379 non-null object\n",
      "GarageYrBlt      1379 non-null float64\n",
      "GarageFinish     1379 non-null object\n",
      "GarageCars       1460 non-null int64\n",
      "GarageArea       1460 non-null int64\n",
      "GarageQual       1379 non-null object\n",
      "GarageCond       1379 non-null object\n",
      "PavedDrive       1460 non-null object\n",
      "WoodDeckSF       1460 non-null int64\n",
      "OpenPorchSF      1460 non-null int64\n",
      "EnclosedPorch    1460 non-null int64\n",
      "3SsnPorch        1460 non-null int64\n",
      "ScreenPorch      1460 non-null int64\n",
      "PoolArea         1460 non-null int64\n",
      "PoolQC           7 non-null object\n",
      "Fence            281 non-null object\n",
      "MiscFeature      54 non-null object\n",
      "MiscVal          1460 non-null int64\n",
      "MoSold           1460 non-null int64\n",
      "YrSold           1460 non-null int64\n",
      "SaleType         1460 non-null object\n",
      "SaleCondition    1460 non-null object\n",
      "SalePrice        1460 non-null int64\n",
      "dtypes: float64(3), int64(35), object(43)\n",
      "memory usage: 924.0+ KB\n"
     ]
    }
   ],
   "source": [
    "train.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "有些特征缺失数据非常多，考虑将其删除，另外有一些考虑用插补法填充,object代表文本类型可以将其进行类别型特征的取值及相应编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 170,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Id</th>\n",
       "      <th>MSSubClass</th>\n",
       "      <th>LotFrontage</th>\n",
       "      <th>LotArea</th>\n",
       "      <th>OverallQual</th>\n",
       "      <th>OverallCond</th>\n",
       "      <th>YearBuilt</th>\n",
       "      <th>YearRemodAdd</th>\n",
       "      <th>MasVnrArea</th>\n",
       "      <th>BsmtFinSF1</th>\n",
       "      <th>...</th>\n",
       "      <th>WoodDeckSF</th>\n",
       "      <th>OpenPorchSF</th>\n",
       "      <th>EnclosedPorch</th>\n",
       "      <th>3SsnPorch</th>\n",
       "      <th>ScreenPorch</th>\n",
       "      <th>PoolArea</th>\n",
       "      <th>MiscVal</th>\n",
       "      <th>MoSold</th>\n",
       "      <th>YrSold</th>\n",
       "      <th>SalePrice</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1201.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1452.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "      <td>1460.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>730.500000</td>\n",
       "      <td>56.897260</td>\n",
       "      <td>70.049958</td>\n",
       "      <td>10516.828082</td>\n",
       "      <td>6.099315</td>\n",
       "      <td>5.575342</td>\n",
       "      <td>1971.267808</td>\n",
       "      <td>1984.865753</td>\n",
       "      <td>103.685262</td>\n",
       "      <td>443.639726</td>\n",
       "      <td>...</td>\n",
       "      <td>94.244521</td>\n",
       "      <td>46.660274</td>\n",
       "      <td>21.954110</td>\n",
       "      <td>3.409589</td>\n",
       "      <td>15.060959</td>\n",
       "      <td>2.758904</td>\n",
       "      <td>43.489041</td>\n",
       "      <td>6.321918</td>\n",
       "      <td>2007.815753</td>\n",
       "      <td>180921.195890</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>421.610009</td>\n",
       "      <td>42.300571</td>\n",
       "      <td>24.284752</td>\n",
       "      <td>9981.264932</td>\n",
       "      <td>1.382997</td>\n",
       "      <td>1.112799</td>\n",
       "      <td>30.202904</td>\n",
       "      <td>20.645407</td>\n",
       "      <td>181.066207</td>\n",
       "      <td>456.098091</td>\n",
       "      <td>...</td>\n",
       "      <td>125.338794</td>\n",
       "      <td>66.256028</td>\n",
       "      <td>61.119149</td>\n",
       "      <td>29.317331</td>\n",
       "      <td>55.757415</td>\n",
       "      <td>40.177307</td>\n",
       "      <td>496.123024</td>\n",
       "      <td>2.703626</td>\n",
       "      <td>1.328095</td>\n",
       "      <td>79442.502883</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>1.000000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>21.000000</td>\n",
       "      <td>1300.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1872.000000</td>\n",
       "      <td>1950.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>2006.000000</td>\n",
       "      <td>34900.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>365.750000</td>\n",
       "      <td>20.000000</td>\n",
       "      <td>59.000000</td>\n",
       "      <td>7553.500000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1954.000000</td>\n",
       "      <td>1967.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>2007.000000</td>\n",
       "      <td>129975.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>730.500000</td>\n",
       "      <td>50.000000</td>\n",
       "      <td>69.000000</td>\n",
       "      <td>9478.500000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>5.000000</td>\n",
       "      <td>1973.000000</td>\n",
       "      <td>1994.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>383.500000</td>\n",
       "      <td>...</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>25.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2008.000000</td>\n",
       "      <td>163000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>1095.250000</td>\n",
       "      <td>70.000000</td>\n",
       "      <td>80.000000</td>\n",
       "      <td>11601.500000</td>\n",
       "      <td>7.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>2000.000000</td>\n",
       "      <td>2004.000000</td>\n",
       "      <td>166.000000</td>\n",
       "      <td>712.250000</td>\n",
       "      <td>...</td>\n",
       "      <td>168.000000</td>\n",
       "      <td>68.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>8.000000</td>\n",
       "      <td>2009.000000</td>\n",
       "      <td>214000.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>1460.000000</td>\n",
       "      <td>190.000000</td>\n",
       "      <td>313.000000</td>\n",
       "      <td>215245.000000</td>\n",
       "      <td>10.000000</td>\n",
       "      <td>9.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>1600.000000</td>\n",
       "      <td>5644.000000</td>\n",
       "      <td>...</td>\n",
       "      <td>857.000000</td>\n",
       "      <td>547.000000</td>\n",
       "      <td>552.000000</td>\n",
       "      <td>508.000000</td>\n",
       "      <td>480.000000</td>\n",
       "      <td>738.000000</td>\n",
       "      <td>15500.000000</td>\n",
       "      <td>12.000000</td>\n",
       "      <td>2010.000000</td>\n",
       "      <td>755000.000000</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>8 rows × 38 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                Id   MSSubClass  LotFrontage        LotArea  OverallQual  \\\n",
       "count  1460.000000  1460.000000  1201.000000    1460.000000  1460.000000   \n",
       "mean    730.500000    56.897260    70.049958   10516.828082     6.099315   \n",
       "std     421.610009    42.300571    24.284752    9981.264932     1.382997   \n",
       "min       1.000000    20.000000    21.000000    1300.000000     1.000000   \n",
       "25%     365.750000    20.000000    59.000000    7553.500000     5.000000   \n",
       "50%     730.500000    50.000000    69.000000    9478.500000     6.000000   \n",
       "75%    1095.250000    70.000000    80.000000   11601.500000     7.000000   \n",
       "max    1460.000000   190.000000   313.000000  215245.000000    10.000000   \n",
       "\n",
       "       OverallCond    YearBuilt  YearRemodAdd   MasVnrArea   BsmtFinSF1  \\\n",
       "count  1460.000000  1460.000000   1460.000000  1452.000000  1460.000000   \n",
       "mean      5.575342  1971.267808   1984.865753   103.685262   443.639726   \n",
       "std       1.112799    30.202904     20.645407   181.066207   456.098091   \n",
       "min       1.000000  1872.000000   1950.000000     0.000000     0.000000   \n",
       "25%       5.000000  1954.000000   1967.000000     0.000000     0.000000   \n",
       "50%       5.000000  1973.000000   1994.000000     0.000000   383.500000   \n",
       "75%       6.000000  2000.000000   2004.000000   166.000000   712.250000   \n",
       "max       9.000000  2010.000000   2010.000000  1600.000000  5644.000000   \n",
       "\n",
       "           ...         WoodDeckSF  OpenPorchSF  EnclosedPorch    3SsnPorch  \\\n",
       "count      ...        1460.000000  1460.000000    1460.000000  1460.000000   \n",
       "mean       ...          94.244521    46.660274      21.954110     3.409589   \n",
       "std        ...         125.338794    66.256028      61.119149    29.317331   \n",
       "min        ...           0.000000     0.000000       0.000000     0.000000   \n",
       "25%        ...           0.000000     0.000000       0.000000     0.000000   \n",
       "50%        ...           0.000000    25.000000       0.000000     0.000000   \n",
       "75%        ...         168.000000    68.000000       0.000000     0.000000   \n",
       "max        ...         857.000000   547.000000     552.000000   508.000000   \n",
       "\n",
       "       ScreenPorch     PoolArea       MiscVal       MoSold       YrSold  \\\n",
       "count  1460.000000  1460.000000   1460.000000  1460.000000  1460.000000   \n",
       "mean     15.060959     2.758904     43.489041     6.321918  2007.815753   \n",
       "std      55.757415    40.177307    496.123024     2.703626     1.328095   \n",
       "min       0.000000     0.000000      0.000000     1.000000  2006.000000   \n",
       "25%       0.000000     0.000000      0.000000     5.000000  2007.000000   \n",
       "50%       0.000000     0.000000      0.000000     6.000000  2008.000000   \n",
       "75%       0.000000     0.000000      0.000000     8.000000  2009.000000   \n",
       "max     480.000000   738.000000  15500.000000    12.000000  2010.000000   \n",
       "\n",
       "           SalePrice  \n",
       "count    1460.000000  \n",
       "mean   180921.195890  \n",
       "std     79442.502883  \n",
       "min     34900.000000  \n",
       "25%    129975.000000  \n",
       "50%    163000.000000  \n",
       "75%    214000.000000  \n",
       "max    755000.000000  \n",
       "\n",
       "[8 rows x 38 columns]"
      ]
     },
     "execution_count": 170,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "train.describe()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 171,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "RangeIndex: 1459 entries, 0 to 1458\n",
      "Data columns (total 80 columns):\n",
      "Id               1459 non-null int64\n",
      "MSSubClass       1459 non-null int64\n",
      "MSZoning         1455 non-null object\n",
      "LotFrontage      1232 non-null float64\n",
      "LotArea          1459 non-null int64\n",
      "Street           1459 non-null object\n",
      "Alley            107 non-null object\n",
      "LotShape         1459 non-null object\n",
      "LandContour      1459 non-null object\n",
      "Utilities        1457 non-null object\n",
      "LotConfig        1459 non-null object\n",
      "LandSlope        1459 non-null object\n",
      "Neighborhood     1459 non-null object\n",
      "Condition1       1459 non-null object\n",
      "Condition2       1459 non-null object\n",
      "BldgType         1459 non-null object\n",
      "HouseStyle       1459 non-null object\n",
      "OverallQual      1459 non-null int64\n",
      "OverallCond      1459 non-null int64\n",
      "YearBuilt        1459 non-null int64\n",
      "YearRemodAdd     1459 non-null int64\n",
      "RoofStyle        1459 non-null object\n",
      "RoofMatl         1459 non-null object\n",
      "Exterior1st      1458 non-null object\n",
      "Exterior2nd      1458 non-null object\n",
      "MasVnrType       1443 non-null object\n",
      "MasVnrArea       1444 non-null float64\n",
      "ExterQual        1459 non-null object\n",
      "ExterCond        1459 non-null object\n",
      "Foundation       1459 non-null object\n",
      "BsmtQual         1415 non-null object\n",
      "BsmtCond         1414 non-null object\n",
      "BsmtExposure     1415 non-null object\n",
      "BsmtFinType1     1417 non-null object\n",
      "BsmtFinSF1       1458 non-null float64\n",
      "BsmtFinType2     1417 non-null object\n",
      "BsmtFinSF2       1458 non-null float64\n",
      "BsmtUnfSF        1458 non-null float64\n",
      "TotalBsmtSF      1458 non-null float64\n",
      "Heating          1459 non-null object\n",
      "HeatingQC        1459 non-null object\n",
      "CentralAir       1459 non-null object\n",
      "Electrical       1459 non-null object\n",
      "1stFlrSF         1459 non-null int64\n",
      "2ndFlrSF         1459 non-null int64\n",
      "LowQualFinSF     1459 non-null int64\n",
      "GrLivArea        1459 non-null int64\n",
      "BsmtFullBath     1457 non-null float64\n",
      "BsmtHalfBath     1457 non-null float64\n",
      "FullBath         1459 non-null int64\n",
      "HalfBath         1459 non-null int64\n",
      "BedroomAbvGr     1459 non-null int64\n",
      "KitchenAbvGr     1459 non-null int64\n",
      "KitchenQual      1458 non-null object\n",
      "TotRmsAbvGrd     1459 non-null int64\n",
      "Functional       1457 non-null object\n",
      "Fireplaces       1459 non-null int64\n",
      "FireplaceQu      729 non-null object\n",
      "GarageType       1383 non-null object\n",
      "GarageYrBlt      1381 non-null float64\n",
      "GarageFinish     1381 non-null object\n",
      "GarageCars       1458 non-null float64\n",
      "GarageArea       1458 non-null float64\n",
      "GarageQual       1381 non-null object\n",
      "GarageCond       1381 non-null object\n",
      "PavedDrive       1459 non-null object\n",
      "WoodDeckSF       1459 non-null int64\n",
      "OpenPorchSF      1459 non-null int64\n",
      "EnclosedPorch    1459 non-null int64\n",
      "3SsnPorch        1459 non-null int64\n",
      "ScreenPorch      1459 non-null int64\n",
      "PoolArea         1459 non-null int64\n",
      "PoolQC           3 non-null object\n",
      "Fence            290 non-null object\n",
      "MiscFeature      51 non-null object\n",
      "MiscVal          1459 non-null int64\n",
      "MoSold           1459 non-null int64\n",
      "YrSold           1459 non-null int64\n",
      "SaleType         1458 non-null object\n",
      "SaleCondition    1459 non-null object\n",
      "dtypes: float64(11), int64(26), object(43)\n",
      "memory usage: 912.0+ KB\n"
     ]
    }
   ],
   "source": [
    "test.info()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对比发现数据类型好像有一些不一样？而且差一列特征值，发现好像没有SalePrice的数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 172,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
      "  warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "sns.distplot(train.SalePrice,bins=50,kde=True)\n",
    "plt.xlabel('SalePr')\n",
    "plt.show()\n",
    "#从下图看出来 样本分布明显的左偏，"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 173,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.collections.PathCollection at 0xca508d0>"
      ]
     },
     "execution_count": 173,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(range(train.shape[0]),train['SalePrice'].values,color='red')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从图中可以看出大部分数据集中在100000~300000之间，判断大于400000的均为离群点，需要清除"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 174,
   "metadata": {},
   "outputs": [],
   "source": [
    "train = train[train.SalePrice<400000]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 175,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Anaconda3\\lib\\site-packages\\matplotlib\\axes\\_axes.py:6462: UserWarning: The 'normed' kwarg is deprecated, and has been replaced by the 'density' kwarg.\n",
      "  warnings.warn(\"The 'normed' kwarg is deprecated, and has been \"\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig = plt.figure()\n",
    "sns.distplot(train.SalePrice,bins=50,kde=True)\n",
    "plt.xlabel('SalePr')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 176,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "这些特征建议删除:Alley\n",
      "这些特征建议删除:PoolQC\n",
      "这些特征建议删除:Fence\n",
      "这些特征建议删除:MiscFeature\n",
      "这些特征建议删除:Alley\n",
      "这些特征建议删除:PoolQC\n",
      "这些特征建议删除:Fence\n",
      "这些特征建议删除:MiscFeature\n",
      "['BsmtFinType1', 'SaleType', 'BsmtFinType2', 'Exterior2nd', 'Electrical', 'MasVnrType', 'KitchenQual', 'GarageCond', 'MSZoning', 'GarageQual', 'BsmtUnfSF', 'GarageYrBlt', 'BsmtFullBath', 'BsmtFinSF1', 'Functional', 'GarageArea', 'MasVnrArea', 'BsmtFinSF2', 'Exterior1st', 'BsmtCond', 'FireplaceQu', 'GarageFinish', 'Utilities', 'LotFrontage', 'TotalBsmtSF', 'GarageType', 'BsmtHalfBath', 'GarageCars', 'BsmtQual', 'BsmtExposure']\n"
     ]
    }
   ],
   "source": [
    "#判断有哪些特征有缺失值，将它打印出来，等下看情况填补，如果特征值缺失数目大于1000以上的话就将整个特征值删除\n",
    "def null_df(df):\n",
    "    num_null = df.isnull().sum()\n",
    "    null_list=[]\n",
    "    for i in num_null.index:\n",
    "        if  0<num_null[i]<1000:\n",
    "            null_list.append(i)\n",
    "        elif num_null[i]>1000:\n",
    "            print(\"这些特征建议删除:\"+i)\n",
    "    return null_list\n",
    "\n",
    "list1=list(set(null_df(train)+null_df(test)))\n",
    "print(list1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对以上打印出来的特征做缺失值处理"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 177,
   "metadata": {},
   "outputs": [],
   "source": [
    "def process_missvalue(df):\n",
    "    #先删除缺失值特别多的特征值\n",
    "    df=df.drop(['Alley','PoolQC','Fence','MiscFeature'],axis=1)\n",
    "    #['BsmtFinType1', 'SaleType', 'BsmtFinType2', 'Exterior2nd', 'Electrical', \n",
    "#     'MasVnrType', 'KitchenQual', 'GarageCond', 'MSZoning', 'GarageQual',\n",
    "#     'BsmtUnfSF', 'GarageYrBlt', 'BsmtFullBath', 'BsmtFinSF1', 'Functional',\n",
    "\n",
    "    #按照内容 分别填充缺失值\n",
    "    df.loc[:,'BsmtFinType1']=df.loc[:,'BsmtFinType1'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'SaleType']=df.loc[:,'SaleType'].fillna('WD')\n",
    "    \n",
    "    df.loc[:,'BsmtFinType2']=df.loc[:,'BsmtFinType2'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'Exterior2nd']=df.loc[:,'Exterior2nd'].fillna(method='ffill')\n",
    "    \n",
    "    df.loc[:,'Electrical']=df.loc[:,'Electrical'].fillna(method='ffill')\n",
    "    \n",
    "    df.loc[:,'MasVnrType']=df.loc[:,'MasVnrType'].fillna('None')\n",
    "    \n",
    "    df.loc[:,'KitchenQual']=df.loc[:,'KitchenQual'].fillna('TA')\n",
    "    \n",
    "    df.loc[:,'GarageCond']=df.loc[:,'GarageCond'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'MSZoning']=df.loc[:,'MSZoning'].fillna(method='ffill')\n",
    "    \n",
    "    df.loc[:,'GarageQual']=df.loc[:,'GarageQual'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'GarageYrBlt']=df.loc[:,'GarageYrBlt'].fillna(method='ffill')\n",
    "    \n",
    "    df.loc[:,'BsmtUnfSF']=df.loc[:,'BsmtUnfSF'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'BsmtFullBath']=df.loc[:,'BsmtFullBath'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'BsmtFinSF1']=df.loc[:,'BsmtFinSF1'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'Functional']=df.loc[:,'Functional'].fillna('Typ')\n",
    "    \n",
    "    df.loc[:,'GarageArea']=df.loc[:,'GarageArea'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'MasVnrArea']=df.loc[:,'MasVnrArea'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'BsmtFinSF2']=df.loc[:,'BsmtFinSF2'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'Exterior1st']=df.loc[:,'Exterior1st'].fillna(method='ffill')\n",
    "    \n",
    "    df.loc[:,'BsmtCond']=df.loc[:,'BsmtCond'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'FireplaceQu']=df.loc[:,'FireplaceQu'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'GarageFinish']=df.loc[:,'GarageFinish'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'Utilities']=df.loc[:,'Utilities'].fillna('AllPub')\n",
    "    \n",
    "    df.loc[:,'LotFrontage']=df.loc[:,'LotFrontage'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'TotalBsmtSF']=df.loc[:,'TotalBsmtSF'].fillna(method='ffill')\n",
    "    \n",
    "    df.loc[:,'GarageType']=df.loc[:,'GarageType'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'BsmtHalfBath']=df.loc[:,'BsmtHalfBath'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'GarageCars']=df.loc[:,'GarageCars'].fillna(0)\n",
    "    \n",
    "    df.loc[:,'BsmtQual']=df.loc[:,'BsmtQual'].fillna('No')\n",
    "    \n",
    "    df.loc[:,'BsmtExposure']=df.loc[:,'BsmtExposure'].fillna('No')\n",
    "    \n",
    "    return df\n",
    "train = process_missvalue(train)\n",
    "test= process_missvalue(test)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 178,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "MSZoning特征的不同取值以及次数\n",
      "RL         1124\n",
      "RM          217\n",
      "FV           65\n",
      "RH           16\n",
      "C (all)      10\n",
      "Name: MSZoning, dtype: int64\n",
      "\n",
      "Street特征的不同取值以及次数\n",
      "Pave    1426\n",
      "Grvl       6\n",
      "Name: Street, dtype: int64\n",
      "\n",
      "LotShape特征的不同取值以及次数\n",
      "Reg    916\n",
      "IR1    471\n",
      "IR2     35\n",
      "IR3     10\n",
      "Name: LotShape, dtype: int64\n",
      "\n",
      "LandContour特征的不同取值以及次数\n",
      "Lvl    1285\n",
      "Bnk      63\n",
      "HLS      48\n",
      "Low      36\n",
      "Name: LandContour, dtype: int64\n",
      "\n",
      "Utilities特征的不同取值以及次数\n",
      "AllPub    1431\n",
      "NoSeWa       1\n",
      "Name: Utilities, dtype: int64\n",
      "\n",
      "LotConfig特征的不同取值以及次数\n",
      "Inside     1034\n",
      "Corner      260\n",
      "CulDSac      87\n",
      "FR2          47\n",
      "FR3           4\n",
      "Name: LotConfig, dtype: int64\n",
      "\n",
      "LandSlope特征的不同取值以及次数\n",
      "Gtl    1355\n",
      "Mod      64\n",
      "Sev      13\n",
      "Name: LandSlope, dtype: int64\n",
      "\n",
      "Neighborhood特征的不同取值以及次数\n",
      "NAmes      225\n",
      "CollgCr    149\n",
      "OldTown    112\n",
      "Edwards    100\n",
      "Somerst     85\n",
      "Gilbert     79\n",
      "Sawyer      74\n",
      "NWAmes      73\n",
      "NridgHt     64\n",
      "SawyerW     59\n",
      "BrkSide     58\n",
      "Crawfor     51\n",
      "Mitchel     49\n",
      "Timber      38\n",
      "IDOTRR      37\n",
      "NoRidge     33\n",
      "ClearCr     28\n",
      "SWISU       25\n",
      "StoneBr     21\n",
      "Blmngtn     17\n",
      "MeadowV     17\n",
      "BrDale      16\n",
      "Veenker     11\n",
      "NPkVill      9\n",
      "Blueste      2\n",
      "Name: Neighborhood, dtype: int64\n",
      "\n",
      "Condition1特征的不同取值以及次数\n",
      "Norm      1234\n",
      "Feedr       81\n",
      "Artery      47\n",
      "RRAn        25\n",
      "PosN        19\n",
      "RRAe        11\n",
      "PosA         8\n",
      "RRNn         5\n",
      "RRNe         2\n",
      "Name: Condition1, dtype: int64\n",
      "\n",
      "Condition2特征的不同取值以及次数\n",
      "Norm      1417\n",
      "Feedr        6\n",
      "PosN         2\n",
      "RRNn         2\n",
      "Artery       2\n",
      "PosA         1\n",
      "RRAn         1\n",
      "RRAe         1\n",
      "Name: Condition2, dtype: int64\n",
      "\n",
      "BldgType特征的不同取值以及次数\n",
      "1Fam      1192\n",
      "TwnhsE     114\n",
      "Duplex      52\n",
      "Twnhs       43\n",
      "2fmCon      31\n",
      "Name: BldgType, dtype: int64\n",
      "\n",
      "HouseStyle特征的不同取值以及次数\n",
      "1Story    716\n",
      "2Story    429\n",
      "1.5Fin    153\n",
      "SLvl       65\n",
      "SFoyer     37\n",
      "1.5Unf     14\n",
      "2.5Unf     11\n",
      "2.5Fin      7\n",
      "Name: HouseStyle, dtype: int64\n",
      "\n",
      "RoofStyle特征的不同取值以及次数\n",
      "Gable      1131\n",
      "Hip         268\n",
      "Flat         13\n",
      "Gambrel      11\n",
      "Mansard       7\n",
      "Shed          2\n",
      "Name: RoofStyle, dtype: int64\n",
      "\n",
      "RoofMatl特征的不同取值以及次数\n",
      "CompShg    1408\n",
      "Tar&Grv      11\n",
      "WdShake       5\n",
      "WdShngl       4\n",
      "ClyTile       1\n",
      "Roll          1\n",
      "Membran       1\n",
      "Metal         1\n",
      "Name: RoofMatl, dtype: int64\n",
      "\n",
      "Exterior1st特征的不同取值以及次数\n",
      "VinylSd    498\n",
      "HdBoard    220\n",
      "MetalSd    220\n",
      "Wd Sdng    204\n",
      "Plywood    108\n",
      "CemntBd     55\n",
      "BrkFace     49\n",
      "WdShing     26\n",
      "Stucco      25\n",
      "AsbShng     20\n",
      "BrkComm      2\n",
      "Stone        2\n",
      "AsphShn      1\n",
      "CBlock       1\n",
      "ImStucc      1\n",
      "Name: Exterior1st, dtype: int64\n",
      "\n",
      "Exterior2nd特征的不同取值以及次数\n",
      "VinylSd    487\n",
      "MetalSd    214\n",
      "HdBoard    205\n",
      "Wd Sdng    196\n",
      "Plywood    142\n",
      "CmentBd     55\n",
      "Wd Shng     37\n",
      "Stucco      26\n",
      "BrkFace     24\n",
      "AsbShng     20\n",
      "ImStucc      9\n",
      "Brk Cmn      7\n",
      "Stone        5\n",
      "AsphShn      3\n",
      "CBlock       1\n",
      "Other        1\n",
      "Name: Exterior2nd, dtype: int64\n",
      "\n",
      "MasVnrType特征的不同取值以及次数\n",
      "None       867\n",
      "BrkFace    432\n",
      "Stone      118\n",
      "BrkCmn      15\n",
      "Name: MasVnrType, dtype: int64\n",
      "\n",
      "ExterQual特征的不同取值以及次数\n",
      "TA    906\n",
      "Gd    476\n",
      "Ex     36\n",
      "Fa     14\n",
      "Name: ExterQual, dtype: int64\n",
      "\n",
      "ExterCond特征的不同取值以及次数\n",
      "TA    1256\n",
      "Gd     144\n",
      "Fa      28\n",
      "Ex       3\n",
      "Po       1\n",
      "Name: ExterCond, dtype: int64\n",
      "\n",
      "Foundation特征的不同取值以及次数\n",
      "CBlock    633\n",
      "PConc     621\n",
      "BrkTil    145\n",
      "Slab       24\n",
      "Stone       6\n",
      "Wood        3\n",
      "Name: Foundation, dtype: int64\n",
      "\n",
      "BsmtQual特征的不同取值以及次数\n",
      "TA    648\n",
      "Gd    613\n",
      "Ex     99\n",
      "No     37\n",
      "Fa     35\n",
      "Name: BsmtQual, dtype: int64\n",
      "\n",
      "BsmtCond特征的不同取值以及次数\n",
      "TA    1285\n",
      "Gd      63\n",
      "Fa      45\n",
      "No      37\n",
      "Po       2\n",
      "Name: BsmtCond, dtype: int64\n",
      "\n",
      "BsmtExposure特征的不同取值以及次数\n",
      "No    984\n",
      "Av    215\n",
      "Gd    121\n",
      "Mn    112\n",
      "Name: BsmtExposure, dtype: int64\n",
      "\n",
      "BsmtFinType1特征的不同取值以及次数\n",
      "Unf    425\n",
      "GLQ    396\n",
      "ALQ    219\n",
      "BLQ    148\n",
      "Rec    133\n",
      "LwQ     74\n",
      "No      37\n",
      "Name: BsmtFinType1, dtype: int64\n",
      "\n",
      "BsmtFinType2特征的不同取值以及次数\n",
      "Unf    1230\n",
      "Rec      53\n",
      "LwQ      46\n",
      "No       38\n",
      "BLQ      33\n",
      "ALQ      18\n",
      "GLQ      14\n",
      "Name: BsmtFinType2, dtype: int64\n",
      "\n",
      "Heating特征的不同取值以及次数\n",
      "GasA     1400\n",
      "GasW       18\n",
      "Grav        7\n",
      "Wall        4\n",
      "OthW        2\n",
      "Floor       1\n",
      "Name: Heating, dtype: int64\n",
      "\n",
      "HeatingQC特征的不同取值以及次数\n",
      "Ex    713\n",
      "TA    428\n",
      "Gd    241\n",
      "Fa     49\n",
      "Po      1\n",
      "Name: HeatingQC, dtype: int64\n",
      "\n",
      "CentralAir特征的不同取值以及次数\n",
      "Y    1337\n",
      "N      95\n",
      "Name: CentralAir, dtype: int64\n",
      "\n",
      "Electrical特征的不同取值以及次数\n",
      "SBrkr    1307\n",
      "FuseA      94\n",
      "FuseF      27\n",
      "FuseP       3\n",
      "Mix         1\n",
      "Name: Electrical, dtype: int64\n",
      "\n",
      "KitchenQual特征的不同取值以及次数\n",
      "TA    735\n",
      "Gd    579\n",
      "Ex     79\n",
      "Fa     39\n",
      "Name: KitchenQual, dtype: int64\n",
      "\n",
      "Functional特征的不同取值以及次数\n",
      "Typ     1333\n",
      "Min2      34\n",
      "Min1      31\n",
      "Mod       14\n",
      "Maj1      14\n",
      "Maj2       5\n",
      "Sev        1\n",
      "Name: Functional, dtype: int64\n",
      "\n",
      "FireplaceQu特征的不同取值以及次数\n",
      "No    690\n",
      "Gd    365\n",
      "TA    307\n",
      "Fa     33\n",
      "Po     20\n",
      "Ex     17\n",
      "Name: FireplaceQu, dtype: int64\n",
      "\n",
      "GarageType特征的不同取值以及次数\n",
      "Attchd     852\n",
      "Detchd     386\n",
      "No          81\n",
      "BuiltIn     79\n",
      "Basment     19\n",
      "CarPort      9\n",
      "2Types       6\n",
      "Name: GarageType, dtype: int64\n",
      "\n",
      "GarageFinish特征的不同取值以及次数\n",
      "Unf    604\n",
      "RFn    415\n",
      "Fin    332\n",
      "No      81\n",
      "Name: GarageFinish, dtype: int64\n",
      "\n",
      "GarageQual特征的不同取值以及次数\n",
      "TA    1284\n",
      "No      81\n",
      "Fa      48\n",
      "Gd      14\n",
      "Po       3\n",
      "Ex       2\n",
      "Name: GarageQual, dtype: int64\n",
      "\n",
      "GarageCond特征的不同取值以及次数\n",
      "TA    1298\n",
      "No      81\n",
      "Fa      35\n",
      "Gd       9\n",
      "Po       7\n",
      "Ex       2\n",
      "Name: GarageCond, dtype: int64\n",
      "\n",
      "PavedDrive特征的不同取值以及次数\n",
      "Y    1312\n",
      "N      90\n",
      "P      30\n",
      "Name: PavedDrive, dtype: int64\n",
      "\n",
      "SaleType特征的不同取值以及次数\n",
      "WD       1255\n",
      "New       107\n",
      "COD        43\n",
      "ConLD       9\n",
      "ConLw       5\n",
      "CWD         4\n",
      "ConLI       4\n",
      "Oth         3\n",
      "Con         2\n",
      "Name: SaleType, dtype: int64\n",
      "\n",
      "SaleCondition特征的不同取值以及次数\n",
      "Normal     1186\n",
      "Partial     110\n",
      "Abnorml     100\n",
      "Family       20\n",
      "Alloca       12\n",
      "AdjLand       4\n",
      "Name: SaleCondition, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "train_obj=train.select_dtypes(include=['object'])\n",
    "test_obj=test.select_dtypes(include=['object'])\n",
    "for i in train_obj.columns:\n",
    "    print('\\n%s特征的不同取值以及次数'%i)\n",
    "    print(train_obj[i].value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "考虑到一个一个的给文本类型赋值太累了，下面写了一个方法进行批量的赋值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 179,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "3\n"
     ]
    }
   ],
   "source": [
    "\n",
    "obj_dict=dict()\n",
    "for col in train_obj.columns:\n",
    "    obj_dict[col]=dict()\n",
    "    i=1\n",
    "    for val in set(train_obj[col]):\n",
    "        if val is 'No':\n",
    "            obj_dict[col][val]=0\n",
    "        else:\n",
    "            obj_dict[col][val]=i\n",
    "        i+=1\n",
    "print(obj_dict['LandContour']['Bnk'])\n",
    "    "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下面进行类别特征编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 180,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<class 'pandas.core.frame.DataFrame'>\n",
      "Int64Index: 1432 entries, 0 to 1459\n",
      "Data columns (total 39 columns):\n",
      "MSZoning         1432 non-null int64\n",
      "Street           1432 non-null int64\n",
      "LotShape         1432 non-null int64\n",
      "LandContour      1432 non-null int64\n",
      "Utilities        1432 non-null int64\n",
      "LotConfig        1432 non-null int64\n",
      "LandSlope        1432 non-null int64\n",
      "Neighborhood     1432 non-null int64\n",
      "Condition1       1432 non-null int64\n",
      "Condition2       1432 non-null int64\n",
      "BldgType         1432 non-null int64\n",
      "HouseStyle       1432 non-null int64\n",
      "RoofStyle        1432 non-null int64\n",
      "RoofMatl         1432 non-null int64\n",
      "Exterior1st      1432 non-null int64\n",
      "Exterior2nd      1432 non-null int64\n",
      "MasVnrType       1432 non-null int64\n",
      "ExterQual        1432 non-null int64\n",
      "ExterCond        1432 non-null int64\n",
      "Foundation       1432 non-null int64\n",
      "BsmtQual         1432 non-null int64\n",
      "BsmtCond         1432 non-null int64\n",
      "BsmtExposure     1432 non-null int64\n",
      "BsmtFinType1     1432 non-null int64\n",
      "BsmtFinType2     1432 non-null int64\n",
      "Heating          1432 non-null int64\n",
      "HeatingQC        1432 non-null int64\n",
      "CentralAir       1432 non-null int64\n",
      "Electrical       1432 non-null int64\n",
      "KitchenQual      1432 non-null int64\n",
      "Functional       1432 non-null int64\n",
      "FireplaceQu      1432 non-null int64\n",
      "GarageType       1432 non-null int64\n",
      "GarageFinish     1432 non-null int64\n",
      "GarageQual       1432 non-null int64\n",
      "GarageCond       1432 non-null int64\n",
      "PavedDrive       1432 non-null int64\n",
      "SaleType         1432 non-null int64\n",
      "SaleCondition    1432 non-null int64\n",
      "dtypes: int64(39)\n",
      "memory usage: 447.5 KB\n"
     ]
    }
   ],
   "source": [
    "def obj2number(df,obj_dict):\n",
    "#     num={'BsmtFinType1':{\"No\" : 0, \"Unf\" : 1, \"LwQ\": 2, \"Rec\" : 3, \"BLQ\" : 4, \"ALQ\" : 5, \"GLQ\" : 6},\n",
    "#          'MSZoning':{\"RL\" : 1, \"RM\" : 2, \"FV\": 3, \"RH\" : 4, \"C (all)\" : 5},\n",
    "#          'Street':{\"Pave\" : 1, \"Grvl\" : 2},\n",
    "#          'LotShape':{\"Reg\" : 1, \"IR1\" : 2, \"IR2\": 3, \"IR3\" : 4},\n",
    "#          'LandContour':{\"Lvl\" : 1, \"Bnk\" : 2, \"HLS\": 3, \"Low\" : 4},\n",
    "#          'Utilities':{\"AllPub\" : 1, \"NoSeWa\" : 0},\n",
    "#          'LotConfig':{\"Inside\" : 1, \"Corner\" : 2, \"CulDSac\": 3, \"FR2\" : 4, \"FR3\" : 5},\n",
    "#          'LandSlope':{\"Gtl\" : 1, \"Mod\" : 2, \"Sev\": 3, \"RH\" : 4, \"C (all)\" : 5},\n",
    "#          'Neighborhood':{\"NAmes\" : 1, \"CollgCr\" : 2, \"OldTown\": 3, \"Edwards\" : 4, \"Somerst\" : 5,\n",
    "#                         \"Gilbert\" : 1, \"Sawyer\" : 2, \"NWAmes\": 3, \"NridgHt\" : 4, \"SawyerW\" : 5,\n",
    "#                         \"BrkSide\" : 1, \"Crawfor\" : 2, \"Mitchel\": 3, \"Timber\" : 4, \"IDOTRR\" : 5,\n",
    "#                         \"NoRidge\" : 1, \"ClearCr\" : 2, \"SWISU\": 3, \"StoneBr\" : 4, \"Blmngtn\" : 5,\n",
    "#                         \"BrkSide\" : 1, \"Crawfor\" : 2, \"Mitchel\": 3, \"Timber\" : 4, \"IDOTRR\" : 5,},\n",
    "    df=df.replace(obj_dict)\n",
    "    return df\n",
    "train_obj = obj2number(train_obj,obj_dict)\n",
    "test_obj = obj2number(test_obj,obj_dict)\n",
    "train_obj.info()             "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "这样一来就全是数值型特征了，部分特征采用独热编码"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 181,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_num = train.drop(train_obj.columns,axis=1)\n",
    "test_num = test.drop(train_obj.columns,axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 182,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "train_obj['train']=1\n",
    "test_obj['train']=2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 186,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>MSZoning_1</th>\n",
       "      <th>MSZoning_2</th>\n",
       "      <th>MSZoning_3</th>\n",
       "      <th>MSZoning_4</th>\n",
       "      <th>MSZoning_5</th>\n",
       "      <th>Street_1</th>\n",
       "      <th>Street_2</th>\n",
       "      <th>LotShape_1</th>\n",
       "      <th>LotShape_2</th>\n",
       "      <th>LotShape_3</th>\n",
       "      <th>...</th>\n",
       "      <th>SaleType_8</th>\n",
       "      <th>SaleType_9</th>\n",
       "      <th>SaleCondition_1</th>\n",
       "      <th>SaleCondition_2</th>\n",
       "      <th>SaleCondition_3</th>\n",
       "      <th>SaleCondition_4</th>\n",
       "      <th>SaleCondition_5</th>\n",
       "      <th>SaleCondition_6</th>\n",
       "      <th>train_1</th>\n",
       "      <th>train_2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 250 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   MSZoning_1  MSZoning_2  MSZoning_3  MSZoning_4  MSZoning_5  Street_1  \\\n",
       "0           0           1           0           0           0         0   \n",
       "1           0           1           0           0           0         0   \n",
       "2           0           1           0           0           0         0   \n",
       "3           0           1           0           0           0         0   \n",
       "4           0           1           0           0           0         0   \n",
       "\n",
       "   Street_2  LotShape_1  LotShape_2  LotShape_3   ...     SaleType_8  \\\n",
       "0         1           0           1           0   ...              0   \n",
       "1         1           0           1           0   ...              0   \n",
       "2         1           0           0           0   ...              0   \n",
       "3         1           0           0           0   ...              0   \n",
       "4         1           0           0           0   ...              0   \n",
       "\n",
       "   SaleType_9  SaleCondition_1  SaleCondition_2  SaleCondition_3  \\\n",
       "0           0                0                0                0   \n",
       "1           0                0                0                0   \n",
       "2           0                0                0                0   \n",
       "3           0                0                1                0   \n",
       "4           0                0                0                0   \n",
       "\n",
       "   SaleCondition_4  SaleCondition_5  SaleCondition_6  train_1  train_2  \n",
       "0                0                1                0        1        0  \n",
       "1                0                1                0        1        0  \n",
       "2                0                1                0        1        0  \n",
       "3                0                0                0        1        0  \n",
       "4                0                1                0        1        0  \n",
       "\n",
       "[5 rows x 250 columns]"
      ]
     },
     "execution_count": 186,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "all_num=train_obj.append(test_obj)\n",
    "all_cat=pd.get_dummies(all_num,columns=all_num.columns)\n",
    "all_cat.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将训练集和数据集的类别特征部分先合并统一独热编码，再分离,最后再和前面的数值特征合并"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 193,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_cat=all_cat[all_cat.train_1==1].drop(['train_1','train_2'],axis=1)\n",
    "test_cat=all_cat[all_cat.train_2==1].drop(['train_1','train_2'],axis=1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 199,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_fin=pd.concat([train_cat,train_num],axis = 1, ignore_index=False)\n",
    "test_fin=pd.concat([test_cat,test_num],axis = 1, ignore_index=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 201,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(1459, 285)"
      ]
     },
     "execution_count": 201,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_fin.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 202,
   "metadata": {},
   "outputs": [],
   "source": [
    "train_fin.to_csv('train_fin_ztt.csv',index=False)\n",
    "test_fin.to_csv('test_fin_ztt.csv',index=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后将整理好的训练集和测试集保存出来"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
